home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / boot / netBoot.new / dev / tmreg.h < prev    next >
C/C++ Source or Header  |  1990-12-19  |  5KB  |  175 lines

  1.  
  2. /*    @(#)tmreg.h 1.1 86/09/27 SMI    */
  3.  
  4. /*
  5.  * Copyright (c) 1986 by Sun Microsystems, Inc.
  6.  */
  7.  
  8. /*
  9.  * IOPB Definitions for Computer Products Corp. TapeMaster
  10.  */
  11. struct    addr86 {
  12.     u_short    a_offset;
  13.     u_short    a_base;
  14. };
  15.  
  16. typedef    struct addr86 ptr86_t;
  17. typedef    unsigned bit;
  18.  
  19. /*
  20.  * The wire-wrapped configured System Configuration Pointer:
  21.  * This is the same for all controllers since it is used only
  22.  * to initialize the controller.
  23.  */
  24. #define    TM_SCPADDR    0x1106        /* History! */
  25.  
  26. /*
  27.  * System Configuration Pointer
  28.  * At a jumpered address (low nibble 6)
  29.  */
  30. struct    tmscp {
  31.     char    tmscb_busx, tmscb_bus;    /* 8/16 bit bus flag */
  32.     ptr86_t    tmscb_ptr;        /* pointer to configuration block */
  33. };
  34.  
  35. /* Definitions for tmscb_bus */
  36. #define    TMSCB_BUS8    0    /* 8 bit bus */
  37. #define    TMSCB_BUS16    1    /* 16 bit bus */
  38.  
  39. /*
  40.  * System Configuration Block
  41.  * Statically located between controller resets
  42.  */
  43. struct    tmscb {
  44.     char    tmscb_03x, tmscb_03;    /* constant 0x03 */
  45.     ptr86_t    tmccb_ptr;        /* pointer to channel control block */
  46. };
  47. #define    TMSCB_CONS    0x03    /* random constant for SCB */
  48.  
  49. /*
  50.  * Channel Control Block
  51.  * Statically located between controller resets
  52.  */
  53. struct    tmccb {
  54.     unsigned char tmccb_gate, tmccb_ccw;    /* interrupt control */
  55.     ptr86_t    tmtpb_ptr;        /* pointer to tape parm block */
  56. };
  57. /* definitions for ccb_gate */
  58. #define    TMG_OPEN   0x00        /* open - ctlr available */ 
  59. #define    TMG_CLOSED 0xFF        /* closed - ctlr active or alloc */
  60. /* definitions for ccb_ccw */
  61. #define    TMC_NORMAL 0x11        /* normal command */
  62. #define    TMC_CLRINT 0x09        /* clear active interrupt */
  63.  
  64. /*
  65.  * Tape Status Structure - one word
  66.  */
  67. struct    tmstat {
  68.     bit    tms_entered:1;    /* tpb entered */
  69.     bit    tms_compl : 1;    /* tpb complete */
  70.     bit    tms_retry : 1;    /* tpb was retried */
  71.     bit    tms_error : 5;    /* error code */
  72.     /* byte */
  73.     bit     tms_eof   : 1;    /* filemark */
  74.     bit    tms_online: 1;    /* on line */
  75.     bit    tms_load  : 1;    /* at load point */
  76.     bit    tms_eot   : 1;    /* end of tape */
  77.     bit    tms_ready : 1;    /* ready */
  78.     bit    tms_fbusy : 1;    /* fmt busy */
  79.     bit    tms_prot  : 1;    /* wrt protected */
  80.     bit           : 1;    /* unused */
  81.     /* byte */
  82. };
  83. #define    TMS_BITS "\2PROT\3BUSY\4RDY\5EOT\6BOT\7ONL\10EOF"
  84.  
  85. /* Tape error codes (tms_error) */
  86. #define    E_NOERROR 0    /* normal completion */
  87. #define    E_EOT      0x09    /* end of file on read */
  88. #define    E_BADTAPE 0x0A    /* bad spot on tape */
  89. #define    E_OVERRUN 0x0B    /* Bus over/under run */
  90. #define    E_PARITY  0x0D    /* Read parity error */
  91. #define    E_SHORTREC 0x0F    /* short record on read; error on write */
  92. #define    E_EOF      0x15    /* end of file on read */
  93.  
  94. /*
  95.  * Tape Parameter Block
  96.  * Dynamically located via CCB
  97.  */
  98. struct    tpb {
  99.     short    tm_cmd;            /* command word(byte) */
  100.     short    tm_cmd2;        /* zero command word */
  101.     struct {
  102.         bit    tmc_width : 1;    /* bus width */
  103.         bit              : 2;    /* unused */
  104.         bit    tmc_cont  : 1;    /* continuous movement */
  105.         bit    tmc_speed : 1;    /* slow or stream */
  106.         bit    tmc_rev   : 1;    /* reverse */
  107.         bit         : 1;    /* unused */
  108.         bit    tmc_bank  : 1;    /* bank select */
  109.         /* byte */
  110.         bit    tmc_lock  : 1;    /* bus lock */
  111.         bit    tmc_link  : 1;    /* tpb link */
  112.         bit    tmc_intr  : 1;    /* want interrupt */
  113.         bit    tmc_mail  : 1;    /* mailbox intr */
  114.         bit    tmc_tape  : 2;    /* tape select */
  115.         bit         : 2;    /* unused */
  116.         /* byte */
  117.     }    tm_ctl;            /* control word */
  118.     u_short    tm_count;        /* return count */
  119.     u_short    tm_bsize;        /* buffer size */
  120.     u_short    tm_rcount;        /* real size / overrun */
  121.     ptr86_t tm_baddr;        /* buffer address */
  122.     struct    tmstat tm_stat;        /* tape status */
  123.     ptr86_t    tm_intrlink;        /* intr/link addr */
  124. };
  125.  
  126. /*
  127.  * Interesting tape commands (tm_cmd)
  128.  */
  129. #define    TM_CONFIG    0x00    /* Configure controller */
  130. #define    TM_REWIND    0x04    /* Rewind (overlapped) */
  131. #define    TM_NOP        0x20    /* NOP - for clearing intrs */
  132. #define    TM_STATUS    0x28    /* Drive Status */
  133. #define    TM_READ        0x2C    /* Read to MB memory */
  134. #define    TM_WRITE    0x30    /* Write to MB memory */
  135. #define    TM_REWINDX    0x34    /* Rewind (non-overlapped) */
  136. #define    TM_UNLOAD    0x38    /* Unload or go offline */
  137. #define    TM_WEOF        0x40    /* Write file mark (EOF) */ 
  138. #define    TM_SEARCH    0x44    /* search multiple filemarks */
  139. #define    TM_SPACE    0x48    /* move over tape record */
  140. #define    TM_ERASE    0x4C    /* Erase fixed length */
  141. #define    TM_SPACEF    0x70    /* move over tape record till EOF */
  142. #define    TM_OPTION    0x78    /* TapeMaster A only: set options */
  143.  
  144. #define    TMOP_DOSWAB    0x04    /* tm_rcount to enable swab with TM_OPTION */
  145. #define    TMOP_ISSWAB    0x200    /* swabbing is enabled */
  146.  
  147. /*
  148.  * Tape directions (tmc_rev)
  149.  */
  150. #define    TM_DIRBIT    1
  151. #define    TM_FORWARD    0
  152. #define    TM_REVERSE    1
  153.  
  154. /* 
  155.  * Definition for Multibus I/O space registers
  156.  * These are byte swapped relative to documentation
  157.  */
  158. struct    tmdevice {
  159.     char    tmdev_reset;    /* Write resets */
  160.     char    tmdev_attn;    /* Write wakes up ctlr */
  161. };
  162.  
  163. /*
  164.  * Data which must be present for each controller
  165.  * in Multibus memory.
  166.  */
  167. struct    tm_mbinfo {
  168.     struct tmscb tmb_scb;    /* System Conf Block */
  169.     struct tmccb tmb_ccb;    /* Channel Control Block */
  170.     struct tpb tmb_tpb;    /* Tape Parameter Block */
  171. };
  172.  
  173. #define    b_repcnt  b_bcount
  174. #define    b_command b_resid
  175.